/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidade.controller.JPA;

import entidade.controller.JPA.exceptions.NonexistentEntityException;
import entidade.controller.JPA.exceptions.RollbackFailureException;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import entidade.persistencia.Produto;
import entidade.persistencia.ProdutoNumeroSerie;
import java.util.ArrayList;
import java.util.List;
import entidade.persistencia.ReparoProdutoNumeroSerie;
import entidade.persistencia.ProdutoManutencao;
import javax.transaction.UserTransaction;

/**
 *
 * @author victorinox
 */
public class ProdutoNumeroSerieJpaController {
    @Resource
    private UserTransaction utx = null;
    @PersistenceUnit(unitName = "globalimage2PU")
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(ProdutoNumeroSerie produtoNumeroSerie) throws RollbackFailureException, Exception {
        if (produtoNumeroSerie.getProdutoNumeroSerieCollection() == null) {
            produtoNumeroSerie.setProdutoNumeroSerieCollection(new ArrayList<ProdutoNumeroSerie>());
        }
        if (produtoNumeroSerie.getProdutoNumeroSerieCollection1() == null) {
            produtoNumeroSerie.setProdutoNumeroSerieCollection1(new ArrayList<ProdutoNumeroSerie>());
        }
        if (produtoNumeroSerie.getReparoProdutoNumeroSerieCollection() == null) {
            produtoNumeroSerie.setReparoProdutoNumeroSerieCollection(new ArrayList<ReparoProdutoNumeroSerie>());
        }
        if (produtoNumeroSerie.getProdutoManutencaoCollection() == null) {
            produtoNumeroSerie.setProdutoManutencaoCollection(new ArrayList<ProdutoManutencao>());
        }
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            Produto produtoId = produtoNumeroSerie.getProdutoId();
            if (produtoId != null) {
                produtoId = em.getReference(produtoId.getClass(), produtoId.getProdutoId());
                produtoNumeroSerie.setProdutoId(produtoId);
            }
            List<ProdutoNumeroSerie> attachedProdutoNumeroSerieCollection = new ArrayList<ProdutoNumeroSerie>();
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionProdutoNumeroSerieToAttach : produtoNumeroSerie.getProdutoNumeroSerieCollection()) {
                produtoNumeroSerieCollectionProdutoNumeroSerieToAttach = em.getReference(produtoNumeroSerieCollectionProdutoNumeroSerieToAttach.getClass(), produtoNumeroSerieCollectionProdutoNumeroSerieToAttach.getNumeroSerieId());
                attachedProdutoNumeroSerieCollection.add(produtoNumeroSerieCollectionProdutoNumeroSerieToAttach);
            }
            produtoNumeroSerie.setProdutoNumeroSerieCollection(attachedProdutoNumeroSerieCollection);
            List<ProdutoNumeroSerie> attachedProdutoNumeroSerieCollection1 = new ArrayList<ProdutoNumeroSerie>();
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1ProdutoNumeroSerieToAttach : produtoNumeroSerie.getProdutoNumeroSerieCollection1()) {
                produtoNumeroSerieCollection1ProdutoNumeroSerieToAttach = em.getReference(produtoNumeroSerieCollection1ProdutoNumeroSerieToAttach.getClass(), produtoNumeroSerieCollection1ProdutoNumeroSerieToAttach.getNumeroSerieId());
                attachedProdutoNumeroSerieCollection1.add(produtoNumeroSerieCollection1ProdutoNumeroSerieToAttach);
            }
            produtoNumeroSerie.setProdutoNumeroSerieCollection1(attachedProdutoNumeroSerieCollection1);
            List<ReparoProdutoNumeroSerie> attachedReparoProdutoNumeroSerieCollection = new ArrayList<ReparoProdutoNumeroSerie>();
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerieToAttach : produtoNumeroSerie.getReparoProdutoNumeroSerieCollection()) {
                reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerieToAttach = em.getReference(reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerieToAttach.getClass(), reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerieToAttach.getReparoProdutoNumeroSerieId());
                attachedReparoProdutoNumeroSerieCollection.add(reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerieToAttach);
            }
            produtoNumeroSerie.setReparoProdutoNumeroSerieCollection(attachedReparoProdutoNumeroSerieCollection);
            List<ProdutoManutencao> attachedProdutoManutencaoCollection = new ArrayList<ProdutoManutencao>();
            for (ProdutoManutencao produtoManutencaoCollectionProdutoManutencaoToAttach : produtoNumeroSerie.getProdutoManutencaoCollection()) {
                produtoManutencaoCollectionProdutoManutencaoToAttach = em.getReference(produtoManutencaoCollectionProdutoManutencaoToAttach.getClass(), produtoManutencaoCollectionProdutoManutencaoToAttach.getProdutoManutencaoPK());
                attachedProdutoManutencaoCollection.add(produtoManutencaoCollectionProdutoManutencaoToAttach);
            }
            produtoNumeroSerie.setProdutoManutencaoCollection(attachedProdutoManutencaoCollection);
            em.persist(produtoNumeroSerie);
            if (produtoId != null) {
                produtoId.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                produtoId = em.merge(produtoId);
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionProdutoNumeroSerie : produtoNumeroSerie.getProdutoNumeroSerieCollection()) {
                produtoNumeroSerieCollectionProdutoNumeroSerie.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                produtoNumeroSerieCollectionProdutoNumeroSerie = em.merge(produtoNumeroSerieCollectionProdutoNumeroSerie);
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1ProdutoNumeroSerie : produtoNumeroSerie.getProdutoNumeroSerieCollection1()) {
                produtoNumeroSerieCollection1ProdutoNumeroSerie.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                produtoNumeroSerieCollection1ProdutoNumeroSerie = em.merge(produtoNumeroSerieCollection1ProdutoNumeroSerie);
            }
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie : produtoNumeroSerie.getReparoProdutoNumeroSerieCollection()) {
                ProdutoNumeroSerie oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie = reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie.getNumeroSerieId();
                reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie.setNumeroSerieId(produtoNumeroSerie);
                reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie = em.merge(reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie);
                if (oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie != null) {
                    oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie.getReparoProdutoNumeroSerieCollection().remove(reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie);
                    oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie = em.merge(oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie);
                }
            }
            for (ProdutoManutencao produtoManutencaoCollectionProdutoManutencao : produtoNumeroSerie.getProdutoManutencaoCollection()) {
                ProdutoNumeroSerie oldNumeroSerieIdOfProdutoManutencaoCollectionProdutoManutencao = produtoManutencaoCollectionProdutoManutencao.getNumeroSerieId();
                produtoManutencaoCollectionProdutoManutencao.setNumeroSerieId(produtoNumeroSerie);
                produtoManutencaoCollectionProdutoManutencao = em.merge(produtoManutencaoCollectionProdutoManutencao);
                if (oldNumeroSerieIdOfProdutoManutencaoCollectionProdutoManutencao != null) {
                    oldNumeroSerieIdOfProdutoManutencaoCollectionProdutoManutencao.getProdutoManutencaoCollection().remove(produtoManutencaoCollectionProdutoManutencao);
                    oldNumeroSerieIdOfProdutoManutencaoCollectionProdutoManutencao = em.merge(oldNumeroSerieIdOfProdutoManutencaoCollectionProdutoManutencao);
                }
            }
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(ProdutoNumeroSerie produtoNumeroSerie) throws NonexistentEntityException, RollbackFailureException, Exception {
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            ProdutoNumeroSerie persistentProdutoNumeroSerie = em.find(ProdutoNumeroSerie.class, produtoNumeroSerie.getNumeroSerieId());
            Produto produtoIdOld = persistentProdutoNumeroSerie.getProdutoId();
            Produto produtoIdNew = produtoNumeroSerie.getProdutoId();
            List<ProdutoNumeroSerie> produtoNumeroSerieCollectionOld = persistentProdutoNumeroSerie.getProdutoNumeroSerieCollection();
            List<ProdutoNumeroSerie> produtoNumeroSerieCollectionNew = produtoNumeroSerie.getProdutoNumeroSerieCollection();
            List<ProdutoNumeroSerie> produtoNumeroSerieCollection1Old = persistentProdutoNumeroSerie.getProdutoNumeroSerieCollection1();
            List<ProdutoNumeroSerie> produtoNumeroSerieCollection1New = produtoNumeroSerie.getProdutoNumeroSerieCollection1();
            List<ReparoProdutoNumeroSerie> reparoProdutoNumeroSerieCollectionOld = persistentProdutoNumeroSerie.getReparoProdutoNumeroSerieCollection();
            List<ReparoProdutoNumeroSerie> reparoProdutoNumeroSerieCollectionNew = produtoNumeroSerie.getReparoProdutoNumeroSerieCollection();
            List<ProdutoManutencao> produtoManutencaoCollectionOld = persistentProdutoNumeroSerie.getProdutoManutencaoCollection();
            List<ProdutoManutencao> produtoManutencaoCollectionNew = produtoNumeroSerie.getProdutoManutencaoCollection();
            if (produtoIdNew != null) {
                produtoIdNew = em.getReference(produtoIdNew.getClass(), produtoIdNew.getProdutoId());
                produtoNumeroSerie.setProdutoId(produtoIdNew);
            }
            List<ProdutoNumeroSerie> attachedProdutoNumeroSerieCollectionNew = new ArrayList<ProdutoNumeroSerie>();
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionNewProdutoNumeroSerieToAttach : produtoNumeroSerieCollectionNew) {
                produtoNumeroSerieCollectionNewProdutoNumeroSerieToAttach = em.getReference(produtoNumeroSerieCollectionNewProdutoNumeroSerieToAttach.getClass(), produtoNumeroSerieCollectionNewProdutoNumeroSerieToAttach.getNumeroSerieId());
                attachedProdutoNumeroSerieCollectionNew.add(produtoNumeroSerieCollectionNewProdutoNumeroSerieToAttach);
            }
            produtoNumeroSerieCollectionNew = attachedProdutoNumeroSerieCollectionNew;
            produtoNumeroSerie.setProdutoNumeroSerieCollection(produtoNumeroSerieCollectionNew);
            List<ProdutoNumeroSerie> attachedProdutoNumeroSerieCollection1New = new ArrayList<ProdutoNumeroSerie>();
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1NewProdutoNumeroSerieToAttach : produtoNumeroSerieCollection1New) {
                produtoNumeroSerieCollection1NewProdutoNumeroSerieToAttach = em.getReference(produtoNumeroSerieCollection1NewProdutoNumeroSerieToAttach.getClass(), produtoNumeroSerieCollection1NewProdutoNumeroSerieToAttach.getNumeroSerieId());
                attachedProdutoNumeroSerieCollection1New.add(produtoNumeroSerieCollection1NewProdutoNumeroSerieToAttach);
            }
            produtoNumeroSerieCollection1New = attachedProdutoNumeroSerieCollection1New;
            produtoNumeroSerie.setProdutoNumeroSerieCollection1(produtoNumeroSerieCollection1New);
            List<ReparoProdutoNumeroSerie> attachedReparoProdutoNumeroSerieCollectionNew = new ArrayList<ReparoProdutoNumeroSerie>();
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerieToAttach : reparoProdutoNumeroSerieCollectionNew) {
                reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerieToAttach = em.getReference(reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerieToAttach.getClass(), reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerieToAttach.getReparoProdutoNumeroSerieId());
                attachedReparoProdutoNumeroSerieCollectionNew.add(reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerieToAttach);
            }
            reparoProdutoNumeroSerieCollectionNew = attachedReparoProdutoNumeroSerieCollectionNew;
            produtoNumeroSerie.setReparoProdutoNumeroSerieCollection(reparoProdutoNumeroSerieCollectionNew);
            List<ProdutoManutencao> attachedProdutoManutencaoCollectionNew = new ArrayList<ProdutoManutencao>();
            for (ProdutoManutencao produtoManutencaoCollectionNewProdutoManutencaoToAttach : produtoManutencaoCollectionNew) {
                produtoManutencaoCollectionNewProdutoManutencaoToAttach = em.getReference(produtoManutencaoCollectionNewProdutoManutencaoToAttach.getClass(), produtoManutencaoCollectionNewProdutoManutencaoToAttach.getProdutoManutencaoPK());
                attachedProdutoManutencaoCollectionNew.add(produtoManutencaoCollectionNewProdutoManutencaoToAttach);
            }
            produtoManutencaoCollectionNew = attachedProdutoManutencaoCollectionNew;
            produtoNumeroSerie.setProdutoManutencaoCollection(produtoManutencaoCollectionNew);
            produtoNumeroSerie = em.merge(produtoNumeroSerie);
            if (produtoIdOld != null && !produtoIdOld.equals(produtoIdNew)) {
                produtoIdOld.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                produtoIdOld = em.merge(produtoIdOld);
            }
            if (produtoIdNew != null && !produtoIdNew.equals(produtoIdOld)) {
                produtoIdNew.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                produtoIdNew = em.merge(produtoIdNew);
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionOldProdutoNumeroSerie : produtoNumeroSerieCollectionOld) {
                if (!produtoNumeroSerieCollectionNew.contains(produtoNumeroSerieCollectionOldProdutoNumeroSerie)) {
                    produtoNumeroSerieCollectionOldProdutoNumeroSerie.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                    produtoNumeroSerieCollectionOldProdutoNumeroSerie = em.merge(produtoNumeroSerieCollectionOldProdutoNumeroSerie);
                }
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionNewProdutoNumeroSerie : produtoNumeroSerieCollectionNew) {
                if (!produtoNumeroSerieCollectionOld.contains(produtoNumeroSerieCollectionNewProdutoNumeroSerie)) {
                    produtoNumeroSerieCollectionNewProdutoNumeroSerie.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                    produtoNumeroSerieCollectionNewProdutoNumeroSerie = em.merge(produtoNumeroSerieCollectionNewProdutoNumeroSerie);
                }
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1OldProdutoNumeroSerie : produtoNumeroSerieCollection1Old) {
                if (!produtoNumeroSerieCollection1New.contains(produtoNumeroSerieCollection1OldProdutoNumeroSerie)) {
                    produtoNumeroSerieCollection1OldProdutoNumeroSerie.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                    produtoNumeroSerieCollection1OldProdutoNumeroSerie = em.merge(produtoNumeroSerieCollection1OldProdutoNumeroSerie);
                }
            }
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1NewProdutoNumeroSerie : produtoNumeroSerieCollection1New) {
                if (!produtoNumeroSerieCollection1Old.contains(produtoNumeroSerieCollection1NewProdutoNumeroSerie)) {
                    produtoNumeroSerieCollection1NewProdutoNumeroSerie.getProdutoNumeroSerieCollection().add(produtoNumeroSerie);
                    produtoNumeroSerieCollection1NewProdutoNumeroSerie = em.merge(produtoNumeroSerieCollection1NewProdutoNumeroSerie);
                }
            }
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionOldReparoProdutoNumeroSerie : reparoProdutoNumeroSerieCollectionOld) {
                if (!reparoProdutoNumeroSerieCollectionNew.contains(reparoProdutoNumeroSerieCollectionOldReparoProdutoNumeroSerie)) {
                    reparoProdutoNumeroSerieCollectionOldReparoProdutoNumeroSerie.setNumeroSerieId(null);
                    reparoProdutoNumeroSerieCollectionOldReparoProdutoNumeroSerie = em.merge(reparoProdutoNumeroSerieCollectionOldReparoProdutoNumeroSerie);
                }
            }
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie : reparoProdutoNumeroSerieCollectionNew) {
                if (!reparoProdutoNumeroSerieCollectionOld.contains(reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie)) {
                    ProdutoNumeroSerie oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie = reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie.getNumeroSerieId();
                    reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie.setNumeroSerieId(produtoNumeroSerie);
                    reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie = em.merge(reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie);
                    if (oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie != null && !oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie.equals(produtoNumeroSerie)) {
                        oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie.getReparoProdutoNumeroSerieCollection().remove(reparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie);
                        oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie = em.merge(oldNumeroSerieIdOfReparoProdutoNumeroSerieCollectionNewReparoProdutoNumeroSerie);
                    }
                }
            }
            for (ProdutoManutencao produtoManutencaoCollectionOldProdutoManutencao : produtoManutencaoCollectionOld) {
                if (!produtoManutencaoCollectionNew.contains(produtoManutencaoCollectionOldProdutoManutencao)) {
                    produtoManutencaoCollectionOldProdutoManutencao.setNumeroSerieId(null);
                    produtoManutencaoCollectionOldProdutoManutencao = em.merge(produtoManutencaoCollectionOldProdutoManutencao);
                }
            }
            for (ProdutoManutencao produtoManutencaoCollectionNewProdutoManutencao : produtoManutencaoCollectionNew) {
                if (!produtoManutencaoCollectionOld.contains(produtoManutencaoCollectionNewProdutoManutencao)) {
                    ProdutoNumeroSerie oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao = produtoManutencaoCollectionNewProdutoManutencao.getNumeroSerieId();
                    produtoManutencaoCollectionNewProdutoManutencao.setNumeroSerieId(produtoNumeroSerie);
                    produtoManutencaoCollectionNewProdutoManutencao = em.merge(produtoManutencaoCollectionNewProdutoManutencao);
                    if (oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao != null && !oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao.equals(produtoNumeroSerie)) {
                        oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao.getProdutoManutencaoCollection().remove(produtoManutencaoCollectionNewProdutoManutencao);
                        oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao = em.merge(oldNumeroSerieIdOfProdutoManutencaoCollectionNewProdutoManutencao);
                    }
                }
            }
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = produtoNumeroSerie.getNumeroSerieId();
                if (findProdutoNumeroSerie(id) == null) {
                    throw new NonexistentEntityException("The produtoNumeroSerie with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException, RollbackFailureException, Exception {
        EntityManager em = null;
        try {
            utx.begin();
            em = getEntityManager();
            ProdutoNumeroSerie produtoNumeroSerie;
            try {
                produtoNumeroSerie = em.getReference(ProdutoNumeroSerie.class, id);
                produtoNumeroSerie.getNumeroSerieId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The produtoNumeroSerie with id " + id + " no longer exists.", enfe);
            }
            Produto produtoId = produtoNumeroSerie.getProdutoId();
            if (produtoId != null) {
                produtoId.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                produtoId = em.merge(produtoId);
            }
            List<ProdutoNumeroSerie> produtoNumeroSerieCollection = produtoNumeroSerie.getProdutoNumeroSerieCollection();
            for (ProdutoNumeroSerie produtoNumeroSerieCollectionProdutoNumeroSerie : produtoNumeroSerieCollection) {
                produtoNumeroSerieCollectionProdutoNumeroSerie.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                produtoNumeroSerieCollectionProdutoNumeroSerie = em.merge(produtoNumeroSerieCollectionProdutoNumeroSerie);
            }
            List<ProdutoNumeroSerie> produtoNumeroSerieCollection1 = produtoNumeroSerie.getProdutoNumeroSerieCollection1();
            for (ProdutoNumeroSerie produtoNumeroSerieCollection1ProdutoNumeroSerie : produtoNumeroSerieCollection1) {
                produtoNumeroSerieCollection1ProdutoNumeroSerie.getProdutoNumeroSerieCollection().remove(produtoNumeroSerie);
                produtoNumeroSerieCollection1ProdutoNumeroSerie = em.merge(produtoNumeroSerieCollection1ProdutoNumeroSerie);
            }
            List<ReparoProdutoNumeroSerie> reparoProdutoNumeroSerieCollection = produtoNumeroSerie.getReparoProdutoNumeroSerieCollection();
            for (ReparoProdutoNumeroSerie reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie : reparoProdutoNumeroSerieCollection) {
                reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie.setNumeroSerieId(null);
                reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie = em.merge(reparoProdutoNumeroSerieCollectionReparoProdutoNumeroSerie);
            }
            List<ProdutoManutencao> produtoManutencaoCollection = produtoNumeroSerie.getProdutoManutencaoCollection();
            for (ProdutoManutencao produtoManutencaoCollectionProdutoManutencao : produtoManutencaoCollection) {
                produtoManutencaoCollectionProdutoManutencao.setNumeroSerieId(null);
                produtoManutencaoCollectionProdutoManutencao = em.merge(produtoManutencaoCollectionProdutoManutencao);
            }
            em.remove(produtoNumeroSerie);
            utx.commit();
        } catch (Exception ex) {
            try {
                utx.rollback();
            } catch (Exception re) {
                throw new RollbackFailureException("An error occurred attempting to roll back the transaction.", re);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<ProdutoNumeroSerie> findProdutoNumeroSerieEntities() {
        return findProdutoNumeroSerieEntities(true, -1, -1);
    }

    public List<ProdutoNumeroSerie> findProdutoNumeroSerieEntities(int maxResults, int firstResult) {
        return findProdutoNumeroSerieEntities(false, maxResults, firstResult);
    }

    private List<ProdutoNumeroSerie> findProdutoNumeroSerieEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from ProdutoNumeroSerie as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public ProdutoNumeroSerie findProdutoNumeroSerie(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(ProdutoNumeroSerie.class, id);
        } finally {
            em.close();
        }
    }

    public int getProdutoNumeroSerieCount() {
        EntityManager em = getEntityManager();
        try {
            return ((Long) em.createQuery("select count(o) from ProdutoNumeroSerie as o").getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}
